# @Time : 2024/10/22 21:57
# @Author : Fioman 
# @Phone : 13149920693
"""
Python中一切皆对象
1) 实例对象,比如 a= 1, b = 1.2 c = "c" d =[1,2,3]  a,b,c,d 是实例对象
2) 类对象,它们对应的int float str, list 也是对象,是类对象
3) 我们创建的自定义类 Class Student:  也是对象,称为类对象
4) 然后我们创建的函数也是一个对象,称为函数对象
5) type也是一个对象,它本身的类型是type
"""
import time

intObj = 3
floatObj = 3.14
strObj = "Hello"
listObj = [1, 2, 3, 4]
print(type(intObj), type(int))
print(type(floatObj), type(float))
print(type(strObj), type(str))
print(type(listObj), type(list))


# 可以看到 int,float,str,list 的类型都是type,也就是说他们都是由type创建的
def func(a):
    print(a)


a = func  # 函数可以赋值给变量,函数也是一个对象
a(a)
print(type(a))  # <class 'function'>


class Person():
    pass


p = Person()
print(type(p), type(Person))  # <class '__main__.Person'> <class 'type'>


# region 2. 函数作为一等公民的说明
# 1) 函数可以赋值给一个变量
def add(a, b):
    return a + b


c = add
ret = c(1, 2)
print(ret)


# 2) 函数可以添加到序列集合中去
def sub(a, b):
    return a - b


d = sub

calcList = [add, c, sub, d]
for calc in calcList:
    print(calc(10, 5))


# 3) 函数作为参数
def count_time(func):
    start = time.time()
    func()
    end = time.time()
    print("耗时: ", end - start)


def do_something():
    print("执行耗时操作")
    time.sleep(5)


count_time(do_something)


# 4) 函数作为返回值
def count_time(func):
    def inner():
        start = time.time()
        func()
        print("耗时: ", time.time() - start)

    return inner


a = count_time(do_something)
a()

# endregion
